from turtle import shape
import taichi as ti

ti.init(arch=ti.cuda)

#root 挂载 列表list  list可嵌套 
# list下可以挂dense指向cell  用于稠密矩阵
# 若cell有数据 则挂载带有定义好结构的cell

a = ti.field(ti.i32, shape=())
x = ti.field(ti.i32)
ti.root.place(x)

b = ti.field(ti.f32, shape=3)
x = ti.field(ti.f32)
ti.root.dense(ti.i, 3).place(x)

c = ti.field(ti.f32, shape=(3, 4))
x = ti.field(ti.f32)
ti.root.dense(ti.ij, (3, 4)).place(x)

x = ti.field(ti.f32)
y = ti.field(ti.f32)
#行主序
ti.root.dense(ti.i, 3).dense(ti.j, 4).place(x)
#列主序
ti.root.dense(ti.j, 4).dense(ti.i, 3).place(y)

d = ti.Matrix().field(2, 2, ti.f32, shape=5)
x = ti.matrix(ti.f32.field(2, 2, ti.f32(2, 2, ti.f32)))
ti.root.dense(ti.i, 5).place(x)


x = ti.field(ti.f32)
y = ti.field(ti.f32)
#内存中构造xy交替结构  AOS
ti.root.dense(ti.i,8).place(x,y)
#内存中构造 一串 x  加上 一串 y   SOA数据
ti.root.dense(ti.i,8).place(x)
ti.root.dense(ti.i,8).place(y)

@ti.kernel
def foo():
    print('a=', a[None])


a[None] = 43
foo()
a[None] = 55
foo()